package AnalisisLexico.Token;

public class Token {

	private String lexema;
	private int identificador = -1;
	private int subclase = -1;
	private double valor = 0;
	
	public Token(String l){
		lexema = l;
		if(l.length() > 1)
			identificador = l.charAt(0) + l.charAt(1);
		else
			identificador = l.charAt(0);
	}

	public void setSubclase(int i) {
		subclase = i;		
	}
	public void setIdentificador(int i){
		identificador = i;
		if(identificador == 257) //si se trata de un num entero
			valor = extraeValorInt(lexema);
		else if(identificador == 258)//si se trata de un num real
			valor = extraeValorDouble(lexema);
	}
	public int getIdentificador() {
		return identificador;
	}

	public int getSubclase() {
		return subclase;
	}

	public String getLexema() {
		return lexema;
	}

	public double getValor() {
		return valor;
	}
	private int extraeValorInt(String lexema2) {
		int val = 0;
		for(int i = 0; i < lexema2.length();i++){
			val= val*10 + Character.getNumericValue(lexema2.charAt(i));
		}
		return val;
	}
	private double extraeValorDouble(String lexema2) {
		int valEnt = 0;
		double valDec = 0.0;
		int potencia10= 1;
		boolean parteDecimal = false;
		for(int i = 0; i < lexema2.length();i++){
			if(lexema2.charAt(i) == '.')
				parteDecimal = true;
			if(!parteDecimal)
			  valEnt= valEnt*10 + Character.getNumericValue(lexema2.charAt(i));
			else{
			  if(lexema2.charAt(i) != '.'){
				  valDec= valDec + (Character.getNumericValue(lexema2.charAt(i)) / Math.pow(10, potencia10));
			      potencia10++;
			  }
			}
		}
		return valEnt +valDec;
	}
	
}
